#define _CRT_SECURE_NO_WARNINGS 
//#include<iostream>
//#include<cstring>
//#include<algorithm>
//using namespace std;
//using ll = long long;
//struct Option
//{
//	ll select;
//	ll x;
//	ll y;
//};
//ll k,n;
//bool flag = false;
//bool visited[10];
//Option opt[10];
//string S, T;
//void dfs(string s, ll start)
//{
//	if (flag)
//	{
//		return;
//	}
//	visited[start] = true;
//	if (opt[start].select == 1)
//	{
//		ll temp = (int)(s[opt[start].x] - '0');
//		temp = (temp + opt[start].y) % 10;
//		s[opt[start].x] = (char)(temp + '0');
//	}
//	else if (opt[start].select == 2)
//	{
//		swap(s[opt[start].x], s[opt[start].y]);
//	}
//	if (s == T)
//	{
//		flag = true;
//		return;
//	}
//	for (ll i = 1; i <= k; i++)
//	{
//		string ss;
//		if (i == start)
//		{
//			continue;
//		}
//		if (visited[i] == 0)
//		{
//			ss = s;
//			dfs(ss, i);
//			visited[i] = false;
//		}
//	}
//}
//int main()
//{
//	string temp_S;
//	cin >> n;
//	cin >> S;
//	cin >> T;
//	cin >> k;
//	for (ll i = 1; i <= k; i++)
//	{
//		cin >> opt[i].select >> opt[i].x >> opt[i].y;
//	}
//	for (ll i = 1; i <= k; i++)
//	{
//		memset(visited, 0, sizeof(visited));
//		temp_S = S;
//		dfs(temp_S, i);
//		if (flag)
//		{
//			cout << "Yes" << endl;
//			break;
//		}
//	}
//	if (flag == false)
//	{
//		cout << "No" << endl;
//	}
//	return 0;
//}
//#include<iostream>
//#include<cstring>
//#include<algorithm>
//using namespace std;
//using ll = long long;
//ll a[30][30];
//bool visited[30][30];
//bool flag = false;
//ll count1 = 0;
//ll count2 = 0;
//ll cnt = 0;
//ll ans = 0;
//ll dx[] = { 2,2,2,1,1,0,0,-1,-1,-2,-2,-2,0,0,-1,1 };
//ll dy[] = { -2,0,2,-1,1,-2,2,-1,1,-2,0,2,1,-1,0,0 };
//bool in_map(ll x,ll y)
//{
//	if (x < 0 || y < 0 || x >= 5 || y >= 5)
//	{
//		return false;
//	}
//	return true;
//}
//bool count(ll x, ll y)
//{
//	for (ll k = 0; k < 25; k++)
//	{
//		ll xx = x + dx[k];
//		ll yy = y + dy[k];
//		if (visited[xx][yy] == true)
//		{
//			count2++;
//		}
//	}
//	if (count2 == 5)
//	{
//		return false;
//	}
//}
//void dfs(ll x,ll y)
//{
//	visited[x][y] = 1;
//	for (ll i = 1; i < 5; i++)
//	{
//		for (ll j = 1; j < 5; j++)
//		{
//			for (ll k = 0; k < 25; k++)
//			{
//				ll xx = x + dx[k];
//				ll yy = y + dy[k];
//				if (in_map(xx, yy)&& count(xx,yy))
//				{
//					visited[xx][yy] = 1;
//					dfs(xx, yy);
//					visited[xx][yy] = 0;
//				}
//			}
//		}
//	}
//	for (ll i = 1; i < 5; i++)
//	{
//		for (ll j = 1; j < 5; j++)
//		{
//			if (visited[i][j])
//			{
//				cnt++;
//			}
//		}
//	}
//	if (cnt == 13)
//	{
//		ans++;
//	}
//}
//int main()
//{
//	memset(a, 0, sizeof(a));
//	dfs(0, 0);
//	cout << ans << endl;
//	return 0;
//}
//#include <bits/stdc++.h>
//using namespace std;
//int mp[5][5];
//using ll = long long;
//ll cnt = 0;
//void dfs(ll sum, ll w, ll b)
//{
//    if (sum == 25)
//    {
//        if (w == 13 && b == 12)
//        {
//            for (ll i = 0; i < 5; i++)
//            {
//                ll row = mp[i][0] + mp[i][1] + mp[i][2] + mp[i][3] + mp[i][4];
//                if (row == 5 || row == 0)
//                {
//                    return;
//                }
//            }
//            for (ll j = 0; j < 5; j++)
//            {
//                ll column = mp[0][j] + mp[1][j] + mp[2][j] + mp[3][j] + mp[4][j];
//                if (column == 5 || column == 0)
//                {
//                    return;
//                }
//            }
//            ll p = mp[0][0] + mp[1][1] + mp[2][2] + mp[3][3] + mp[4][4];
//            if (p == 5 || p == 0)
//            {
//                return;
//            }
//            ll l = mp[0][4] + mp[1][3] + mp[2][2] + mp[3][1] + mp[4][0];
//            if (l == 5 || l == 0)
//            {
//                return;
//            }
//            cnt++;
//        }
//        return;
//    }
//    ll x = sum / 5;
//    ll y = sum % 5;
//    mp[x][y] = 1;
//    dfs(sum + 1, w + 1, b);
//    mp[x][y] = 0;
//    mp[x][y] = -1;
//    dfs(sum + 1, w, b + 1);
//    mp[x][y] = 0;
//}
//int main()
//{
//    dfs(0, 0, 0);
//    cout << cnt << endl;
//    return 0;
//}
//#include<iostream>
//#include<cstring>
//using namespace std;
//using ll = long long;
//ll T,n,m,cnt;
//char map[105][105];
//ll dx[8] = { 1,1,1,0,0,-1,-1,-1 };
//ll dy[8] = { -1,0,1,-1,1,-1,0,1, };
//bool flag = false;
//void dfs(ll x,ll y)
//{
//	if (x == n && y == m)
//	{
//		flag = true;
//		return;
//	}
//	ll xx, yy;
//	for (ll i = 0; i < 8; i++)
//	{
//		xx = x + dx[i];
//		yy = y + dy[i];
//		if (xx >= 0 && xx < n && yy >= 0 && yy < m)
//		{
//			if (map[xx][yy] == '*')
//			{
//				cnt++;
//			}
//		}
//	}
//	if (cnt >= map[xx][yy])
//	{
//		dfs(xx, yy);
//	}
//	
//}
//int main()
//{
//	cin >> T;
//	while (T--)
//	{
//		memset(map, 0, sizeof(map));
//		cin >> n >> m;
//		for (ll i = 0; i < n; i++)
//		{
//			for (ll j = 0; j < m; j++)
//			{
//				cin >> map[i][j];
//			}
//		}
//		dfs(0,0);
//		if (flag == true)
//		{
//			cout << "Single" << endl;
//		}
//		else
//		{
//			cout << "Mutiple" << endl;
//		}
//	}
//	return 0;
//}
#include<iostream>
#include<vector>
using namespace std;
using ll = long long;
const ll N = 1e3 + 10;
ll n, m, T,res;
char a[N][N], b[N][N];
vector<pair<ll, ll>>vec1;
vector<ll>vec2;
int dx[8] = { -1,-1,0,1,1,1,0,-1 };
int dy[8] = { 0,1,1,1,0,-1,-1,-1 };
bool judge(ll x,ll y)
{
	return (x >= 0 && y >= 0 && x < n && y < m);
}
bool judge1()
{
	for (ll i = 0; i < n; i++)
	{
		for (ll j = 0; j < m; j++)
		{
			if (b[i][j] == '*' || b[i][j] == 'X')
			{
				continue;
		   }
			ll num = b[i][j] - '0';
			ll cnt = 0;
			for (ll k = 0; k < 8; k++)
			{
				ll xx = i + dx[k];
				ll yy = j + dy[k];
				if (judge(xx, yy) && b[xx][yy] == 'X')
				{
					cnt++;
				}
			}
			if (num != cnt)
			{
				return false;
			}
		}
	}
	return true;
}
void dfs(ll dep, ll size)
{
	if (!size)
	{
		res = 1;
		return;
	}
	if (dep > size)
	{
		for (ll i = 0; i < n; i++)
		{
			for (ll j = 0; j < m; j++)
			{
				b[i][j] = a[i][j];
			}
		}
		ll cnt = 0;
		for (auto it : vec2)
		{
			if (it == 1)
			{
				b[vec1[cnt].first][vec1[cnt].second] = 'X';
			}
			cnt++;
		}
		if (judge1())
		{
			res++;
		}
		return;
	}
	for (ll i = 0; i <= 1; i++)
	{
		vec2.push_back(i);
		dfs(dep + 1, size);
		vec2.pop_back();
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> T;
	while (T--)
	{
		vec1.clear();
		vec2.clear();
		cin >> n >> m;
		for (ll i = 0; i < n; i++)
		{
			for (ll j = 0; j < m; j++)
			{
				cin >> a[i][j];
				if (a[i][j] == '*')
				{
					vec1.push_back({ i, j });
				}
			}
		}
		res = 0;
		dfs(1, vec1.size());
		if (res == 1)
		{
			cout << "Single" << endl;
		}
		else
		{
			cout << "Multiple" << endl;
		}
	}
	return 0;
}
